Skip to main content

查询 select 的用法

基本的查询语句的结构
----------

select [字段表达式列表] [from子句] [where 子句] [group by 子句] [having 子句] [order by子句] [limit 子句]

字段表达式子句
-------

注意,表达式与别名的概念

1+1,$v1+10, abs(-10)

![](085389B72FBE12105F2F23BF0056DD8F.png)

如果 为 字段名,那么字段名就是一个 变量的概念,可以参与运算!

![](B4AB67339890D4F162AD79ED34BA3C0B.png)

因此,可以利用各种运算符,来形成SQL中的表达式!

例如:逻辑运算符:

![](E57F523009452AFDE0347FDE762A7342.png)

关系运算符:

![](261FA9C5078891339B65507B4674C875.png)

可以是一个列表

![](39231AB62D266E66CD465D3A7A73B843.png)

每个表达式,可以有一个别名:

select结果内,以 表达式本身来命名的!

![](49999434ED43903E726018079B2FBF7F.png)

但是,有两个典型的问题:

1, 表达式直接做名字不容易 识别!

2, 如果名字冲突,不能区分!

![](EB034D537848818855F414173D8FD318.png)

使用 AS 关键字可以使用别名,可以省略as关键字,但是不建议省略!

![](2607DE75BD6CD8BC60B331D6256BF207.png)

from子句
------

表示查询的来源,就是表!

可以写表名列表,使用逗号分割

![](CB48ABB26F125B24046818E996AD3D7B.png)

如果此时没有条件,相当于形成了一个 笛卡尔积!

A集合的每个元素,都与B集合的每个元素之间有个关联!

A表的所有记录,都与B表的所有记录之间存在关联!

此时结果中会将所有的字段都列出来,包括重名的!

![](211E2B47CFE23439C845DFAC33FCD3C5.png)

可以为 相应的字段名起别名:

此时 访问到某个字段需要使用 表名.字段名的形式!

![](731718F9C7559D589A34BB13D838D8DA.png)

表的别名

如果多次出现 表名.字段名的情况,可以为表名起别名!

![](79F4540BEBDE6F3FF9FC6041731386EA.png)

dual 的问题

虚拟表名问题

![](84A851C3A52F250D03C62AC46CA3987E.png)

是语法更加规范而已!

where子句,查询条件子句
--------------

where 条件表达式

运算符,变量(字段)

省略where子句,相当于永远为真~

![](3E81529848CD5BB50C91392876B42EF8.jpg)

where,找到每条记录,并依次执行条件表达式,根据条件结果返回数据!

形成 条件表达式的基本要素:

数据,(变量),运算符,函数调用()

典型的运算符:

关系: \> \< \>= \<= != =

like 模糊查询。数据 like ‘模式匹配符’

可以使用 % 和 \_ 作为通配符

![](278DB05E0FA929DA71708801E7AFE057.png)

not like,不像like取反!

![](4E6A710F418693F4D28F4D2AEAD29E24.png)

![](7A95EDF2361B7A2912AB22D089266370.png)

between 3 and 5, 在某个区间,闭区间。

![](A1EC4D9B9BAC158281B4DD354124D05B.png)

包括边界值:

![](AF566D41EB1A1A14851D416A3F5FB0D3.png)

in,在某个集合之内

in (元素列表)

not in,不在某个集合内

not in (元素列表)

![](D670F50E777F12350B80126A727F318C.png)

留心:

再做 批量操作时,in notin 的出镜率 很高!

集合(3,4,5)区间(3,4)

null 值的判断

不能使用普通的运算符,因为运算的结果都是null,而且不能作为查询条件!

![](E7008A5A54264F307781EEAA53020F8C.png)

![](74464D812491912F9D35A218785FF5EF.png)

应该使用 is null 或者 is not null 来判断!

![](6AA056D49A76B09E032E55E037BCF22D.png)

应该使用上面的来完成判断:

![](17DDFF843FB6E055B13F51A7AA028268.png)

函数 (isnull())也可以完成类似的判断:

![](8D5AC642A2B979226718DE48C16C633A.png)

注意:运算符也有的优先级的概念,注意可以使用 () 来修改优先级!

![](B7D46406130015568EE90E809ACAB0FA.png)

上一篇: [19、查询 select 的用法2](http://arick.leanote.com/post/19%E3%80%81%E6%9F%A5%E8%AF%A2%C2%A0select%C2%A0%E7%9A%84%E7%94%A8%E6%B3%952)

下一篇: [17、增加操作insert into](http://arick.leanote.com/post/17%E3%80%81%E5%A2%9E%E5%8A%A0%E6%93%8D%E4%BD%9Cinsert%C2%A0into)